from fpdf import FPDF
from datetime import datetime
import os
from uuid import uuid4

base_path = os.path.dirname(__file__)

'''
1、cell()方法：width, height, txt, border=0, ln=0, align='', fill=False, link=''
    width，height 设置单元格的宽度和高度， width=0,height=10, 宽度自适应，高度是10
    txt：展示出来的文本信息
    border：边框，0无边框，1是有边框 或组合（'L'：左边框，'T'：上边框，'R'：右边框，'B'：下边框）
    ln：控制文本之后的行为。设置为0表示在同一行中继续，设置为1表示在下一行开始。默认为0。
    align：文本对齐方式。可选值为''（空字符串，默认为左对齐）、'L'（左对齐）、'C'（居中对齐）、'R'（右对齐）
    fill：设置单元格背景颜色。可选值为True（填充）或False（不填充）。默认为False。
    link：设置添加到文本的链接。
2、multi_cell该方法会自动根据指定的宽度和高度进行文本的换行和自动调整单元格大小，也可以使用\n在指定位置进行分行
3、ln方法，空行
'''

class ConsentForm(FPDF):
    #段落首行
    four_blank = '    '
    def header(self):
        # 设置页眉内容
        ttf_path = os.path.join(base_path, 'ttf', 'fs_gb2312.ttf')
        self.add_font('fs_gb2312', '', ttf_path, True)  # 添加字体
        self.set_font("fs_gb2312", "", 18)  # 设置字体大小
        self.ln(2)
        self.cell(0, 10, "医院知情同意书", 0, 1, "C")
        self.ln(10)

    def footer(self):
        # 设置页脚内容
        self.set_y(-15)
        self.set_font("fs_gb2312", "", 8)
        # self.cell(0, 10, "Page %s" % self.page_no(), 0, 0, "C") #添加上第几页
        self.cell(0, 10, '广州信瑞医疗技术有限公司', 0, 0, 'C')

    def add_content(self,data:dict):
        name = data.get('name')
        # 添加同意书内容
        self.set_font("fs_gb2312", "", 12)

        # 添加个人信息
        self.cell(0, 10, f"{self.four_blank}姓名: John Doe", ln=True)
        self.cell(0, 10, f"{self.four_blank}地址: 123 Main St, City, State", ln=True)
        self.cell(0, 10, f"{self.four_blank}电话: (123) 456-7890", ln=True)
        self.cell(0, 10, f"{self.four_blank}电子邮件: johndoe@example.com", ln=True)

        # 添加教育经历
        self.cell(0, 10, f"{self.four_blank}教育经历", ln=True, align="L")  # 标题左对齐
        self.cell(0, 10, f"{self.four_blank}大学名称, 学位, 所学专业", ln=True, align="L")
        self.cell(0, 10, f"{self.four_blank}2000年 - 2004年", ln=True, align="L")

        # 添加工作经历
        self.cell(0, 10, f"{self.four_blank}工作经历", ln=True, align="L")  # 标题左对齐
        self.cell(0, 10, f"{self.four_blank}公司名称", ln=True, align="L")
        self.cell(0, 10, f"{self.four_blank}职位", ln=True, align="L")
        self.cell(0, 10, f"{self.four_blank}2010年 - 至今", ln=True, align="L")
        self.multi_cell(0, 10, f"{self.four_blank}工作描述内容，可以是多行文本。 Coturn 原本只能运行在 Linux 系统上的，当我们在开发项目的时候还有 Linux 云主机，又想要使用 TURN 服务，这时候就需借助 Cygwin 工具来安装 Coturn 了。Cygwin 是一个在 Windows 平台上运行的类 UNIX 模拟环境", align="L")

        self.cell(0, 10,
                  f'{self.four_blank}医生：                     患者：                    日期：{datetime.strftime(datetime.now(), "%Y年%m月%d年")}',
                  ln=1)
        # 插入图片，x=self.get_x()+30当前行的x轴+30，y=self.get_y()-8 当前y轴-8
        self.image("img/201210239446215.jpg", x=self.get_x() + 30, y=self.get_y() - 8, w=30, h=5, )  # 替换为你的图片路径和位置
        self.image("img/201210239446215.jpg", x=self.get_x() + 90, y=self.get_y() - 8, w=30, h=5, )  # 替换为你的图片路径和位置


def main():
    # 创建PDF对象并设置文档属性
    pdf = ConsentForm()
    # 元数据：标题和作者
    pdf.set_title("Hospital Informed Consent Form")
    pdf.set_author("Hospital Name")

    # 添加页面并生成PDF文件
    pdf.add_page()
    pdf.add_content(data={'name':'lhz'})
    # pdf文件保存路径
    path = os.path.join(base_path, 'pdf', f'{uuid4()}.pdf')
    pdf.output(path)
    return path

if __name__ == '__main__':
    main()